﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.Linq;
using System.Linq;
using System.Web;
using System.Web.UI;
using Entidades.Sistema.Venta;
using Mapping.Sistema.Venta;

namespace VistaOnlineR1._1.Models.Sistema.Venta
{
    public static class CatalogoPedidos
    {
        #region Consultas
        public static IEnumerable GetPedidos()
        {
            return from Pedido in MappingPedidos.ConsultarPedidos() select Pedido;
        }
        public static IList<Pedido> GetPedidosEditable()
        {

            IList<Pedido> pedidos = (from pedido in MappingPedidos.ConsultarPedidos()
                            select new Pedido
                            {
                                IdPedido = pedido.IdPedido,
                                Fecha = pedido.Fecha,
                                FechaEntrega = pedido.FechaEntrega,
                                Cliente = pedido.Cliente,
                                Total = pedido.DetallePedidos.Sum(x => x.Producto.PrecioLista * x.Cantidad),
                                Estado = pedido.Estado
                            }).ToList();
            return pedidos;
        }
        public static Pedido GetPedidoEditable(int IdPedido)
        {
            return (from pedido in GetPedidosEditable() where pedido.IdPedido == IdPedido select pedido).FirstOrDefault();
        }        
        public static int GetNewEditablepedidoID()
        {
            IEnumerable<Pedido> editablepedidos = MappingPedidos.ConsultarPedidos();
            return (editablepedidos.Count() > 0) ? editablepedidos.Last().IdPedido + 1 : 0;
        }
        #endregion

        #region Actuaciones
        public static void DeletePedido(int IdPedido)
        {
            Pedido pedido = GetPedidoEditable(IdPedido);
            if (pedido != null)
            {
                GetPedidosEditable().Remove(pedido);
                MappingPedidos.EliminarPedido(pedido);
            }
        }
        public static int InsertPedido(Pedido pedido)
        {
            Pedido editPedido = new Pedido();
            editPedido.IdPedido = GetNewEditablepedidoID();
            editPedido.Estado = pedido.Estado;
            editPedido.Fecha = pedido.Fecha;
            editPedido.FechaEntrega = pedido.FechaEntrega;
            editPedido.Cliente = pedido.Cliente;
            GetPedidosEditable().Add(editPedido);
            MappingPedidos.AgregarPedido(editPedido);
            return editPedido.IdPedido;
        }
        public static void UpdatePedido(Pedido pedido)
        {
            Pedido editPedido = GetPedidoEditable(pedido.IdPedido);
            if (editPedido != null)
            {
                editPedido.Estado = pedido.Estado;
                editPedido.Fecha = pedido.Fecha;
                editPedido.FechaEntrega = pedido.FechaEntrega;
                editPedido.Cliente = pedido.Cliente;
                MappingPedidos.ModificarPedido(pedido);
            }
        }
        #endregion 

        public static IList<DetallePedido> GetPedidoDetalle(int IdPedido)
        {
            IList<Pedido> pedidos = MappingPedidos.ConsultarPedidos();
            Pedido ped = pedidos.FirstOrDefault(p => p.IdPedido == IdPedido);

            return (from det in ped.DetallePedidos
                       select new DetallePedido
                       {
                           IdDetallePedido = det.IdDetallePedido,
                           Cantidad = det.Cantidad,
                           Estado = det.Estado,
                           Producto = det.Producto                           
                       }).ToList();
        }


        public static int InsertPedidoDetalle(int IdPedido, DetallePedido detallepedido)
        {
            MappingPedidos.AgregarDetallePedido(IdPedido, detallepedido);

            return 1;
        }

        //IdProducto = IdPedidoDetalle
        public static int DeletePedidoDetalle(int IdPedido, int IdProducto )
        {
            MappingPedidos.EliminarDetallePedido(IdPedido, IdProducto);

            return 1;
        }

        //public static void UpdateDetallePedido(int IdPedido, DetallePedido detallepedido)
        //{
        //    Pedido editPedido = GetPedidoDetalle(pedido.IdPedido);
        //    if (editPedido != null)
        //    {
        //        editPedido.Estado = pedido.Estado;
        //        editPedido.Fecha = pedido.Fecha;
        //        editPedido.FechaEntrega = pedido.FechaEntrega;
        //        editPedido.Cliente = pedido.Cliente;
        //        MappingPedidos.ModificarPedido(pedido);
        //    }
        //}

        
    }
}